package com.tedu.api.thread;

/**
 * 线程：单线程、多线程
 * 单线程：按照顺序执行线程，主方法就是主线程 main
 * 多线程：创建多条线程，做不同的事情
 * 多线程并发:创建多条线程，“同时”做相同的事情
 *
 * 案例：创建 Chef 类 实现Runnable
 *                  私有属性 dishName
 *                  run()功能：{提示语句：开始准备+dishName
 *                             模拟准备时间：阻塞 1~3秒
 *                   Math.random() 随机生成0.0到1.0浮点数值（不包含1.0）
 *                             提示语句：dishName+准备完成
 *                       }
 *
 *         主方法 实现 创建两个线程 两个  chef1
 *                                   chef2
 */
public class Kitchen {
    public static void main(String[] args) {
        //第一位厨师---西红柿炒鸡蛋
        Thread chef1=new Thread(new Chef("西红柿炒鸡蛋"));
        //第二位厨师--红烧肉
        Thread chef2=new Thread(new Chef("红烧肉"));

        chef1.start();
        chef2.start();
    }
}
//创建厨子类
class Chef implements Runnable{
    private String dishName;//私有属性：菜肴名
    //俩厨子“同时”完成菜肴制作---构造器:区分厨师制作菜肴
    public Chef(String dn){
        this.dishName=dn; //来厨师 this.dishName=“红烧鹅”
                          //this当前对象--Chef
    }
            public void run() {
              System.out.println("开始准备"+dishName);
              //模拟厨师准备时间：1~3秒
              //1.Math.random()  获取0.0~1.0范围值【不包括1.0】
              //范围值：0.0~0.9
              //2.Math.random()*3000,得到范围值：0.0~3000.0【不包括3000.0】
              //范围值：0.0~2999.0   0~2  随机范围：0.0~2.0
              //3.成3000范围：0.0~2999.0，强转long类型 (long)(Math.random())
              //范围值：0~2999 秒数：0~2
              //4.加1000(long)(Math.random()*3000)+1000
              //范围值：1~3秒
              try {
                  Thread.sleep((long)(Math.random()*3000)+1000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
              System.out.println(dishName+"制作完成请享用");
          }

}